# from 模块名 import 模块|类|函数|变量|* as 别名
import time#导入整个模块
print(time.ctime())#调用模块中的函数
# from time import ctime,time#导入指定的函数
# import在首次导入模块的时候，会发生如下3步操作
# 1，打开模块文件
# 2，执行模块对应的文件，将执行过程中产生的名字(名字包括函数、类、变量等)都添加到模块独立的命名空间(模块独立的命名空间是在运行模块时产生的)
# 3，模块的名称对应指向模块的命名空间，通过模块对象可以来访问这些在模块命名空间中定义的名字
# from...import在首次导入模块中部分内容的时候，会发生如下3步操作
# 1，打开模块文件
# 2，执行模块对应的文件，将执行过程中产生的名字(名字包括函数、类、变量等)都添加到模块独立的命名空间(模块独立的命名空间是在运行模块时产生的)
# 3，从模块的独立命名空间中取出指定的名字，并直接添加到当前执行文件的全局命名空间中(引用)，这样就可以不通过模块名作为前缀而直接使用它们，注意确保模块中的名字不会与当前执行文件中的名字冲突，否则会被覆盖。
# 模块搜索路径
# 1，当前目录
# 2，如果当前目录没有，到环境变量中搜索，可以用sys模块中的path变量查看所有路径。
# 3，如果都找不到，搜索默认路径，linux系统，默认路径一般为/usr/local/lib/python/
# 1，导入产生的命名空间：当你导入一个模块时，该模块的代码在其自己的命名空间中执行。这意味着模块中
# 定义的变量、函数等不会污染全局命名空间，也不会与其他模块中的命名冲突。每个模块都有自己独立
# 的命名空间，这是模块系统提供代码隔离和避免命名冲突的一个重要机制。
# 2，直接运行产生的命名空间：当你直接运行一个模块（即作为主程序运行）时，该模块的代码在全局命名空
# 间中执行。这意味着模块中定义的变量、函数等会成为全局变量和函数，可以直接在脚本的任何地方访
# 问，而无需通过模块名作为前缀。
import time as myTime# as关键字可以给模块取别名
print(myTime.ctime())
from time import * # 使用'*'可以导入模块中所有内容，注意若有名称相同会直接覆盖内容，__all__变量可以控制import *的时候哪些名称可以被导入
import my_module # my_module中的test不会被执行
if __name__ == '__main__':#这允许开发者在模块中编写一些只在模块被直接执行时才运行的代码。
    my_test(1, 2)
# 当一个模块被直接执行时，__name__ 的值为 "__main__"。但是，如果一个模块被其他模块导入，那么 __name__ 的值就会被设置为该模块的名字。
